From: Keir Fraser Date: Mon, 2 Nov 2009 09:38:34 +0000 (+0000) Subject: Fixes after addition of dummy_vcpu_info. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~13151 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=18e03239efcb9c1519d43a0df8349a3111079d7e;p=xen.git Fixes after addition of dummy_vcpu_info. - Clean initialisation of new vcpu_info in map_vcpu_info() if the vcpu was previously using the shared dummy structure. - Don't allow a vcpu to run with teh shared dummy info structure, as no good can come of it. Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 7c22d131b8..8f600d2925 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -884,7 +884,15 @@ map_vcpu_info(struct vcpu *v, unsigned long mfn, unsigned offset) new_info = (vcpu_info_t *)(mapping + offset); - memcpy(new_info, v->vcpu_info, sizeof(*new_info)); + if ( v->vcpu_info == &dummy_vcpu_info ) + { + memset(new_info, 0, sizeof(*new_info)); + __vcpu_info(v, new_info, evtchn_upcall_mask) = 1; + } + else + { + memcpy(new_info, v->vcpu_info, sizeof(*new_info)); + } v->vcpu_info = new_info; v->arch.vcpu_info_mfn = mfn; diff --git a/xen/common/domain.c b/xen/common/domain.c index 468f3476ae..5c64fb01a3 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -757,6 +757,9 @@ long do_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE(void) arg) switch ( cmd ) { case VCPUOP_initialise: + if ( v->vcpu_info == &dummy_vcpu_info ) + return -EINVAL; + if ( (ctxt = xmalloc(struct vcpu_guest_context)) == NULL ) return -ENOMEM;